Skip to content

feat: add fish.audio TTS provider#353

Open
ytmknd wants to merge 1 commit into
calesthio:mainfrom
ytmknd:feat/fish-audio-tts-provider
Open

feat: add fish.audio TTS provider#353
ytmknd wants to merge 1 commit into
calesthio:mainfrom
ytmknd:feat/fish-audio-tts-provider

Conversation

@ytmknd

@ytmknd ytmknd commented Jul 10, 2026

Copy link
Copy Markdown

Summary

  • Add FishAudioTTS (capability=tts) so tts_selector auto-discovers a new high-quality, voice-clone-capable TTS provider
  • Backend model is required per call: s1 (previous flagship, kept for compatibility), s2-pro (first S2 generation), s2.1-pro (latest flagship — inline emotion tags, 80+ languages), s2.1-pro-free (free tier for drafts). s1-mini and the speech-1.x tier have been removed from the current fish.audio API and are no longer supported.
  • Voice cloning via reference_id, with voice_id accepted as a selector-compatible alias
  • Adds temperature / top_p / repetition_penalty sampling controls, optional sample_rate, opus output format, and a low latency tier
  • Cost is estimated per UTF-8 byte to match fish.audio billing
  • Adds a Layer 3 skill (.agents/skills/fish-audio-tts/SKILL.md), .env.example entry, and unit tests

Test plan

  • pytest tests/tools/test_fish_audio_tts.py -v — 14 passed
  • Manual smoke test with a real FISH_AUDIO_API_KEY via tts_selector — verified s2.1-pro + reference_id generating a 7-segment Japanese narration

@ytmknd ytmknd requested a review from calesthio as a code owner July 10, 2026 10:02
Add FishAudioTTS (capability=tts) so tts_selector auto-discovers a new
high-quality, voice-clone-capable provider. Backend model is required per
call: s1 (previous flagship, kept for compatibility), s2-pro (first S2
generation), s2.1-pro (latest flagship — inline emotion tags, 80+
languages), s2.1-pro-free (free tier for drafts). s1-mini and the
speech-1.x tier have been removed from the current fish.audio API and are
no longer supported. Voice cloning via reference_id with voice_id as a
selector-compatible alias. Adds temperature/top_p/repetition_penalty
sampling controls, optional sample_rate, opus output format, and a "low"
latency tier. Cost is estimated per UTF-8 byte to match fish.audio
billing. Includes a Layer 3 skill, .env.example entry, and unit tests.

Verified end-to-end with s2.1-pro + reference_id: generated a 7-segment
Japanese narration successfully.
@ytmknd ytmknd force-pushed the feat/fish-audio-tts-provider branch from 8fbfa99 to 58b9b98 Compare July 10, 2026 16:37

@calesthio calesthio left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for opening this and for the focused provider tests. I ran python -m pytest tests/tools/test_fish_audio_tts.py -q: 14 passed. Before merge, please fix the user-facing provider integration: .env.example still advertises speech-1.x even though this PR explicitly removes that model family, and fish.audio is absent from the canonical docs/PROVIDERS.md provider/setup tables and skills/INDEX.md. Those are the setup and discovery surfaces users rely on, so the current text is contradictory and incomplete.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants